package data

// PortInfo 表示端口详细信息
type PortInfo struct {
	Number  int    // 端口号
	Proto   string // 协议类型(TCP/UDP)
	Service string // 服务名称(可选)
	Status  string // 端口状态(open/filtered/closed)
}

// Device 表示网络设备
type Device struct {
	IP    string     // IP地址
	MAC   string     // MAC地址
	Ports []PortInfo // 开放端口列表
	// 可以添加更多设备属性
	Name     string // 设备名称
	Status   string // 设备状态
	LastSeen string // 最后上线时间
}

// AddPort 添加端口到设备
func (d *Device) AddPort(port PortInfo) {
	d.Ports = append(d.Ports, port)
}

// AddSimplePort 添加简单端口(兼容旧版)
func (d *Device) AddSimplePort(port int) {
	d.Ports = append(d.Ports, PortInfo{
		Number: port,
		Proto:  "TCP",
		Status: "open",
	})
}

// RemovePort 从设备移除端口
func (d *Device) RemovePort(portNum int) {
	for i, p := range d.Ports {
		if p.Number == portNum {
			d.Ports = append(d.Ports[:i], d.Ports[i+1:]...)
			break
		}
	}
}

// HasPort 检查设备是否开放指定端口
func (d *Device) HasPort(portNum int) bool {
	for _, p := range d.Ports {
		if p.Number == portNum {
			return true
		}
	}
	return false
}

// GetPort 获取端口详细信息
func (d *Device) GetPort(portNum int) *PortInfo {
	for _, p := range d.Ports {
		if p.Number == portNum {
			return &p
		}
	}
	return nil
}

// FilterPorts 根据条件过滤端口
func (d *Device) FilterPorts(proto string, status string) []PortInfo {
	var result []PortInfo
	for _, p := range d.Ports {
		if (proto == "" || p.Proto == proto) &&
			(status == "" || p.Status == status) {
			result = append(result, p)
		}
	}
	return result
}
